iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Mobile Development

IOS的打怪升級之路系列 第 12

鐵人賽第十二天 調色盤(二)設定限制textfield只能輸入數字 上

  • 分享至 

  • xImage
  •  

說明

在使用者透過 UITextField 輸入顏色值時,我們必須限制其只能輸入數字,以避免輸入到其他不正確的文字內容(如字母或符號)。這需要透過實作 UITextFieldDelegate 來控制使用者的輸入。

實作

我們將透過一個 UITextFieldDelegate 的擴展來實現這個功能,並在textField(_:shouldChangeCharactersIn:replacementString:) 方法中進行數字的限制。

  1. 擴展 MainViewController 並實作 UITextFieldDelegate:
    首先在你的 ViewController 中擴展 UITextFieldDelegate 並實作方法。
extension MainViewController: UITextFieldDelegate {
    func textField(_ textField:UITextField,shouldChangeCharactersIn range:NSRange,replacementString string:String) -> Bool{
        
    }
}
  1. 添加數字輸入限制的邏輯:
    通過檢查輸入字串是否是 ASCII 碼範圍內的數字(0 到 9),阻止非數字字符的輸入。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    // 獲取輸入字串的長度
    let len = string.lengthOfBytes(using: String.Encoding.utf8)
    // 檢查每一個字元是否為數字
    for i in 0..<len {
        let char = (string as NSString).character(at: i)
        if char < 48 || char > 57 { // ASCII 48 是 '0', 57 是 '9'
            textField.text = "0" // 若輸入非數字,將文字設為 0
            return false // 阻止非數字的輸入
        }
    }
    return true // 允許數字的輸入
}
  1. 設定 Delegate
    為了讓 UITextFieldDelegate 的方法生效,需要將 ViewController 設置為 UITextField 的代理。在 viewDidLoad() 方法中,添加如下代碼:
override func viewDidLoad() {
    super.viewDidLoad()
    // 設定 UITextField 的 delegate
    txfRed.delegate = self
    txfGreen.delegate = self
    txfBlue.delegate = self
}

結語

使用 UITextFieldDelegate 來限制使用者的輸入,這樣可以避免輸入非法字符,確保顏色值的正確性。透過簡單的 ASCII 碼判斷,我們可以方便地限制輸入的範圍。下一步將加入進一步的驗證,例如限制顏色值的範圍在 0 到 255 之間。


上一篇
鐵人賽第十一天 調色盤(一)設計畫面與宣告UI
下一篇
鐵人賽第十三天 調色盤(三)設定限制textfield只能輸入數字 下
系列文
IOS的打怪升級之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言